package com.soup.faker.api;

import com.soup.faker.wrapper.ValueWrapper;

public interface Interceptor<T> {
    /**
     * 前置调用
     * @param valueWrapper
     */
    default void before(ValueWrapper<T> valueWrapper){}

    /**
     * 执行成功后调用
     * @param valueWrapper
     * @param generator
     */
    default void afterReturn(ValueWrapper<T> valueWrapper, Generator<T> generator){}

    /**
     * 发生异常时调用
     * @param valueWrapper
     * @param generator
     * @param ex
     */
    default void throwing(ValueWrapper<T> valueWrapper, Generator<T> generator, Exception ex){}

    /**
     * 最终一定会调用
     * @param valueWrapper
     * @param generator
     */
    default void after(ValueWrapper<T> valueWrapper, Generator<T> generator){}

}
